package cz.vse.adventura.po1715.xkosd00_kostka.hra;

import static cz.vse.adventura.po1715.xkosd00_kostka.hra.Texty.*;
/*******************************************************************************
 * Instance tridy {@code PrikazPoloz} predstavuje prikaz
 * k vyjmuti predmetu z batohu a jeho umisteni v aktualni mistnosti.
 * Aby byl prikaz proveden, musi byt zadan název predmetu
 * a predmet zadaneho nazvu musi byt aktualne v batohu.
 *
 * @author    Dominik KOSTKA
 * @version   1.0
 */
public class PrikazPoloz extends APrikaz
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     *
     */
    public PrikazPoloz()
    {
        super( pPOLOŽ, //"Polož",
           "Příkaz vyjme předmět z batohu a odloží jej v aktuální místnosti.\n"+
           "Aby byl příkaz proveden, musí byt zadán název předmětu\n"+
           "a předmět zadaného názvu musí byt aktuálně v batohu.");
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Pokusi se vyjmout z batohu a polozit v mistnosti predmet zadaneho nazvu;
     * před tím však zkontroluje, je-li zadán předmět, který se má položit,
     * a je-li tento předmět v batohu.
     *
     * @param  parametry Nazev pokladaneho predmetu
     * @return Text zpravy vypsane po porovedeni prikazu
     */
    @Override
    public String execute( String... parametry )
    {
        if(parametry.length == 0) return zPŘEDMĚT_NEZADAN;
        
        String   název   = parametry[0];
        Batoh    batoh   = Batoh.getBatoh();
        Predmet  predmet = batoh.vyjmi( název );
        

        if( predmet == null ) return zNENÍ_V_BATOHU + název;
        
        Mistnost am = Mistnost.getAktuálníMístnost();
        am.poloz( predmet );

        if(název.equalsIgnoreCase(TOALETNÍ_PAPÍR) && am == Mistnost.Koupelna1)
            Stav.papírPoložen = true;
        
        if(název.equalsIgnoreCase(MÝDLO) && am == Mistnost.Koupelna2)
            Stav.mýdloPoloženo = true;
        
        if(Stav.papírPoložen && Stav.mýdloPoloženo){
//            Stav.vyhráno = true;
            Hra.getHra().stop();
            return VÝHRA;
        }

        return zPOLOŽENO + název;
    }

//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTOVACÍ METODY A TŘÍDY ==================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        PrikazPoloz inst = new PrikazPoloz();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
